package cn.ch.basic.util;

import cn.ch.basic.jwt.JwtUtils;
import cn.ch.basic.jwt.LoginData;
import cn.ch.basic.jwt.Payload;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.security.PublicKey;

/**
 * 登录Context
 * 登录上下文
 * 1.获取当前登录人的信息  ====写
 * 2.获取当前登录人的权限
 */
public class LoginContext {
    public static final String PUBKEY = "hrm_auth_rsa.pub";

    /**
     * 获取当前登录人
     *
     * @param request 当前请求
     * @return 可能是User 也可能是Employee
     */
    public static Object getLogin(HttpServletRequest request){
        //1.获取jwt  token
        String jwtToken = request.getHeader("U-TOKEN");
        if(StringUtils.isEmpty(jwtToken)){
            return null;
        }
        //2.获取公钥
        //获取公钥
        try {
            PublicKey publicKey = RsaUtils.getPublicKey(JwtUtils.class.getClassLoader().getResource(PUBKEY).getFile());
            Payload<LoginData> payload = JwtUtils.getInfoFromToken(jwtToken, publicKey, LoginData.class);
            LoginData loginData = payload.getLoginData();
            //3.1 拿不到  登录失效或者是个瓦token 阻止放行
            //3.解密jwt，得到载荷数据
            //4.从载荷数据中获取登录信息
            return loginData.getUser() != null ? loginData.getUser() : loginData.getAdmin();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
